/*----------------------------------------------------------
* FILE: ServiceGeneric.java
* LOGICAL NAME: ServiceGeneric
* PRODUCT: bila-framework
*----------------------------------------------------------
* MODIFICATIONS
* DATE Oct 9, 2011
* AUTHOR wjuarez
*----------------------------------------------------------
*/

package bila.framework.services;

import java.io.Serializable;
import java.util.List;

/**
 * @author WJuarez
 * <b>Created by </b>wjuarez
 * <b>for</b> bila-framework
 * <b>package</b> bila.framework.services
 * <b>on</b> Oct 9, 2011 9:40:05 PM
 * <b>Purpose</b> 
 * <p>
 *
 * </p>
 */
public interface ServiceGeneric<Dto, Model, ModelId extends Serializable> extends ServiceFinder<Dto, Model, ModelId> {

	/**
	 * Genera un nuevo registro en la base de datos
	 * @param dto objeto a guardar
	 * @throws Exception
	 */
	public void save(Dto dto) throws Exception;
	
	/**
	 * Actualiza un registro, para que este metodo funcione
	 * debe poseer los atributos de su llave primaria
	 * @param dto objeto a actualizar
	 * @throws Exception
	 */
	public void update(Dto dto) throws Exception;
	
	/**
	 * Elimina un registro, para que este metodo funcione
	 * debe poseer los atributos de su llave primaria
	 * @param dto objeto a eliminar
	 * @throws Exception
	 */
	public void delete(Dto dto) throws Exception;
	
	/**
	 * Metodo que verifica si el objeto ya existe en la base de datos
	 * de ser asi lo guarda como uno nuevo, en caso contrario
	 * actualiza la informacion con los valores que posee el objeto Modelo
	 * @param dto objeto a guardar/actualizar
	 * @throws Exception
	 */
	public void saveOrUpdate(Dto dto) throws Exception;
	
	/**
	 * Guarda o actualiza si el registro ya existe
	 * todos los elementos que se encuentran en la lista.
	 * La lista debe ser de tipo List<Dto>
	 * @param list listado de objetos modelos que desean guardarse o actualizarse
	 * @throws Exception
	 */
	public void saveOrUpdateList(List<Dto> list) throws Exception;
	
	/**
	 * Elimina un listado de objetos Model
	 * @param list lista con los objetos que se desean eliminar
	 * @throws Exception
	 */
	public void deleteList(List<Dto> list) throws Exception;

}
